package com.cristina.attention.handler;

import com.cristina.attention.domain.MessageInfo;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

/**
 * 发送各个渠道的 handler (非 IM 业务)
 *
 * @author by superman
 */
public abstract class Handler {

    /**
     * 标识渠道的 code
     * 子类初始化的时候指定
     */
    protected Integer channelCode;

    @Resource
    private HandlerHolder handlerHolder;

    @PostConstruct
    private void init() {
        handlerHolder.putHandler(channelCode, this);
    }

    public void doHandler(MessageInfo messageInfo) {
        handler(messageInfo);
    }

    /**
     * 统一处理 handler 接口 (非 IM 业务)
     * 具体实现由子类实现
     *
     * @param taskInfo
     */
    public abstract void handler(MessageInfo taskInfo);

}
